home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Utilities / Commodities / Yak / Source / Prefs / GadTools / DigitalClock_window.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-20  |  14.6 KB  |  451 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : GaĆ«l Marziou & Ph. Bastiani
  6.  */
  7.  
  8.  
  9.  
  10.  
  11. #include <exec/types.h>
  12. #include <dos/datetime.h>
  13. #include <intuition/intuition.h>
  14. #include <intuition/classes.h>
  15. #include <intuition/classusr.h>
  16. #include <intuition/imageclass.h>
  17. #include <intuition/gadgetclass.h>
  18. #include <intuition/intuitionbase.h>
  19. #include <libraries/gadtools.h>
  20. #include <proto/exec.h>
  21. #include <proto/intuition.h>
  22. #include <proto/gadtools.h>
  23. #include <proto/wb.h>
  24. #include <string.h>
  25.  
  26.  
  27. #include "yak.h"
  28. #include "version.h"
  29. #include "gui.h"
  30. #include "DigitalClock_window.h"
  31. #include "DigitalClock.h"
  32. #include "Hotkey_types.h"
  33. #include "yak_locale_strings.h"
  34.  
  35.  
  36. extern struct Catalog    *Catalog;
  37.  
  38. extern LONG (*HandleIDCMP)(VOID);
  39.  
  40. struct Window   *DigitalClockWnd = NULL;
  41. struct Gadget   *DigitalClockGList = NULL;
  42. struct Gadget   *DigitalClockGadgets[DigitalClock_CNT];
  43. UWORD            DigitalClockWidth = 500;
  44. UWORD            DigitalClockHeight = 148;
  45. UBYTE           *DigitalClockWdt = NULL;
  46. BOOL             DigitalClockWdi = FALSE;
  47.  
  48. struct AppWindow      *DigitalClockAppWin;         /* AppWindow pointer */
  49. IMPORT struct MsgPort *AppMsgPort;
  50.  
  51. /* Online help system */
  52. IMPORT void ShowYakHelp(char *, char *);
  53. IMPORT char *PrefsHelp;
  54.  
  55. UBYTE *DateFormatLabels[6];
  56. UBYTE *ScreenSelectionLabels[6];
  57.  
  58. static VOID
  59.    InitDateFormatLabels(VOID)
  60. {
  61.    DateFormatLabels[0] = getString(DATE_FORMAT_DOS);
  62.    DateFormatLabels[1] = getString(DATE_FORMAT_INT);
  63.    DateFormatLabels[2] = getString(DATE_FORMAT_USA);
  64.    DateFormatLabels[3] = getString(DATE_FORMAT_CDN);
  65.    DateFormatLabels[4] = getString(DATE_FORMAT_LOCALE);
  66.    DateFormatLabels[5] = NULL;
  67. }
  68.  
  69. static VOID
  70.    InitScreenSelectionLabels(VOID)
  71. {
  72.    ScreenSelectionLabels[0] = getString(WORKBENCH_SCREEN);
  73.    ScreenSelectionLabels[1] = getString(FRONT_SCREEN);
  74.    ScreenSelectionLabels[2] = getString(FRONT_PUBSCREEN);
  75.    ScreenSelectionLabels[3] = getString(DEF_PUBSCREEN);
  76.    ScreenSelectionLabels[4] = getString(BY_SCREEN_TITLE_OPT);
  77.    ScreenSelectionLabels[5] = NULL;
  78. }
  79.  
  80.  
  81. UWORD DigitalClockGTypes[DigitalClock_CNT] = 
  82. {
  83.    CHECKBOX_KIND,
  84.    INTEGER_KIND,
  85.    INTEGER_KIND,
  86.    CHECKBOX_KIND,
  87.    CHECKBOX_KIND,
  88.    CHECKBOX_KIND,
  89.    CHECKBOX_KIND,
  90.    CYCLE_KIND,
  91.    STRING_KIND,
  92.    CYCLE_KIND,
  93.    STRING_KIND,
  94.    BUTTON_KIND
  95.    };
  96.  
  97.  
  98. struct NewGadget DigitalClockNGad[] = 
  99. {
  100.    7,  3, 26,11,NULL,NULL,GD_DC_State            ,PLACETEXT_RIGHT,NULL ,STATE_ACTIVE_STRING,
  101.    250, 15, 51,14,NULL,NULL,GD_DC_Offset           ,PLACETEXT_LEFT ,NULL ,DigitalClockOffset_STRING,
  102.    250, 30, 51,14,NULL,NULL,GD_DC_Interval         ,PLACETEXT_LEFT ,NULL ,DigitalClockInterval_STRING,
  103.    7, 45, 26,11,NULL,NULL,GD_DC_ShowDate         ,PLACETEXT_RIGHT,NULL ,DigitalClockShowDate_STRING,
  104.    250, 45, 26,11,NULL,NULL,GD_DC_ShowDay          ,PLACETEXT_RIGHT,NULL ,DigitalClockShowDay_STRING,
  105.    7, 57, 26,11,NULL,NULL,GD_DC_ShortDay         ,PLACETEXT_RIGHT,NULL ,DigitalClockShortDay_STRING,
  106.    250, 57, 26,11,NULL,NULL,GD_DC_ShowSecs         ,PLACETEXT_RIGHT,NULL ,DigitalClockShowSecs_STRING,
  107.    250, 69,243,14,NULL,NULL,GD_DC_DateFormat       ,PLACETEXT_LEFT ,NULL ,DigitalClockDateFormat_STRING,
  108.    250, 84,243,14,NULL,NULL,GD_DC_LocaleDateFormat ,PLACETEXT_LEFT ,NULL ,DigitalClockLocaleDateFormat_STRING,
  109.    250, 99,243,11,NULL,NULL,GD_DC_ScreenSelection  ,PLACETEXT_LEFT,NULL ,DigitalClockScreenSelection_STRING,
  110.    250,111,243,14,NULL,NULL,GD_DC_ScreenPattern    ,PLACETEXT_LEFT ,NULL ,DigitalClockScreenPattern_STRING,
  111.    200,132,100,13,NULL,NULL,GD_DC_OK               ,PLACETEXT_IN   ,NULL ,OK_STRING
  112.    };
  113.  
  114.  
  115. ULONG DigitalClockGTags[] = 
  116. {
  117.    (GTCB_Scaled),TRUE,(TAG_DONE),
  118.    (GTIN_Number),0,(GTIN_MaxChars),4,(STRINGA_Justification),STRINGRIGHT,(TAG_DONE),
  119.    (GTIN_Number),0,(GTIN_MaxChars),4,(STRINGA_Justification),STRINGRIGHT,(TAG_DONE),
  120.    (GTCB_Scaled),TRUE,(TAG_DONE),
  121.    (GTCB_Scaled),TRUE,(TAG_DONE),
  122.    (GTCB_Scaled),TRUE,(TAG_DONE),
  123.    (GTCB_Scaled),TRUE,(TAG_DONE),
  124.    (GTCY_Labels),(ULONG)&DateFormatLabels[ 0 ],(TAG_DONE),
  125.    (GTST_MaxChars), 256, (TAG_DONE),
  126.    (GTCY_Labels),(ULONG)&ScreenSelectionLabels[ 0 ],(TAG_DONE),
  127.    (GTST_MaxChars), PATLEN, (TAG_DONE),
  128.    (TAG_DONE),
  129. };
  130.  
  131.  
  132.  
  133. static VOID
  134.    DigitalClockRender(VOID)
  135. {
  136.    UWORD X,Y, Width, Height;
  137.    
  138.    ComputeFont(DigitalClockWidth,DigitalClockHeight);
  139.    
  140.    Width = ComputeX( DigitalClockWidth );
  141.    
  142.    X = Y = 0;
  143.    Height = ComputeY(129);
  144.    DrawThinBevelBox( Scr, DigitalClockWnd->RPort, X+OffX,Y+OffY,
  145.                     Width,
  146.                     Height,
  147.                     FALSE );
  148.    
  149.    Y += Height;
  150.    Height = ComputeY(DigitalClockHeight) - Y;
  151.    DrawThinBevelBox( Scr, DigitalClockWnd->RPort, X+OffX,Y+OffY,
  152.                     Width,
  153.                     Height,
  154.                     FALSE );
  155. }
  156.  
  157.  
  158.  
  159. int
  160.    OpenDigitalClockWindow(VOID)
  161. {
  162.    struct NewGadget        ng;
  163.    struct Gadget   *g;
  164.    UWORD           lc,tc;
  165.    WORD            wleft=WindowLeft, wtop=WindowTop;
  166.    UWORD           ww, wh;
  167.    
  168.    ComputeFont(DigitalClockWidth,DigitalClockHeight);
  169.    
  170.    ww = OffX + ComputeX(DigitalClockWidth) + Scr->WBorRight;
  171.    wh = OffY + ComputeY(DigitalClockHeight) + Scr->WBorBottom;
  172.    
  173.    SetUpWindowCoordinates(ww, wh, &wleft, &wtop);
  174.    
  175.    if (! (g = CreateContext(&DigitalClockGList))) 
  176.    {
  177.       return(1L);
  178.    }
  179.    
  180.    for(lc = 0,tc = 0; lc < DigitalClock_CNT; lc++) 
  181.    {
  182.       
  183.       CopyMem((char *)&DigitalClockNGad[ lc ],(char *)&ng,(long)sizeof(struct NewGadget));
  184.       
  185.       ng.ng_VisualInfo = VisualInfo;
  186.       ng.ng_TextAttr   = Font;
  187.       ng.ng_LeftEdge   = OffX +ComputeX(ng.ng_LeftEdge);
  188.       ng.ng_TopEdge    = OffY +ComputeY(ng.ng_TopEdge);
  189.       ng.ng_Width      = ComputeX(ng.ng_Width);
  190.       ng.ng_Height     = ComputeY(ng.ng_Height);
  191.       
  192.       DigitalClockGadgets[ lc ] = g = CreateGadgetA((ULONG)DigitalClockGTypes[ lc ],g,&ng,(struct TagItem *) &DigitalClockGTags[ tc ]);
  193.       
  194.       while(DigitalClockGTags[ tc ]) 
  195.          tc += 2;
  196.       
  197.       tc++;
  198.       
  199.       if (NOT g)
  200.          return(2L);
  201.    }
  202.    
  203.    if (NOT (DigitalClockWnd = OpenWindowTags(NULL,
  204.                                              WA_Left,         wleft,
  205.                                              WA_Top,          wtop,
  206.                                              WA_Width,        ww,
  207.                                              WA_Height,       wh,
  208.                                              WA_IDCMP,        LISTVIEWIDCMP|STRINGIDCMP|CYCLEIDCMP|BUTTONIDCMP|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
  209.                                              WA_Flags,        WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
  210.                                              WA_Gadgets,      DigitalClockGList,
  211.                                              WA_Title,        DigitalClockWdt,
  212.                                              WA_ScreenTitle,  getString(COPYRIGHT_STRING),
  213.                                              WA_PubScreen,    Scr,
  214.                                              WA_PubScreenName,PubScreenName,
  215.                                              TAG_DONE)))
  216.       return(4L);
  217.    
  218.    DigitalClockAppWin = AddAppWindowA(0, 0, DigitalClockWnd, AppMsgPort, NULL);
  219.    
  220.    GT_RefreshWindow(DigitalClockWnd,NULL);
  221.    
  222.    DigitalClockRender();
  223.    
  224.    return(0L);
  225. }
  226.  
  227.  
  228.  
  229. VOID
  230.    CloseDigitalClockWindow(VOID)
  231. {
  232.    CloseOneWindow(DigitalClockWnd,NULL,DigitalClockGList,DigitalClockAppWin);
  233.    DigitalClockWnd = NULL;
  234. }
  235.  
  236.  
  237.  
  238. /* initialise all gadgets of DigitalClock window */
  239.  
  240. static void
  241.    InitDigitalClockGadgets(VOID)
  242. {
  243.    BOOL UseLocale;
  244.    
  245.    InitWindowGadget(GDX_DC_State, GTCB_Checked, DC_V_Config.State, DIGITALCLOCK_WINDOW);
  246.    InitWindowGadget(GDX_DC_Offset, GTIN_Number, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
  247.    InitWindowGadget(GDX_DC_Interval, GTIN_Number, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
  248.    InitWindowGadget(GDX_DC_ShowDate, GTCB_Checked, DC_V_Config.ShowDate, DIGITALCLOCK_WINDOW);
  249.    InitWindowGadget(GDX_DC_ShowDay, GTCB_Checked, DC_V_Config.ShowDay, DIGITALCLOCK_WINDOW);
  250.    InitWindowGadget(GDX_DC_ShortDay, GTCB_Checked, DC_V_Config.ShortDay, DIGITALCLOCK_WINDOW);
  251.    InitWindowGadget(GDX_DC_ShowSecs, GTCB_Checked, DC_V_Config.ShowSecs, DIGITALCLOCK_WINDOW);
  252.    InitWindowGadget(GDX_DC_DateFormat, GTCY_Active, DC_V_Config.DateFormat, DIGITALCLOCK_WINDOW);
  253.    InitWindowGadget(GDX_DC_LocaleDateFormat, GTST_String , (LONG)DC_V_Config.LocaleDateFormat, DIGITALCLOCK_WINDOW);
  254.    InitWindowGadget(GDX_DC_ScreenSelection, GTCY_Active, DC_V_Config.ScreenSelection, DIGITALCLOCK_WINDOW);
  255.    InitWindowGadget(GDX_DC_ScreenPattern, GTST_String , (LONG)DC_V_Config.ScreenPatternData.patstr, DIGITALCLOCK_WINDOW);
  256.    
  257.    if (DC_V_Config.State == DC_C_ACTIVE)
  258.    {
  259.       InitWindowGadget(GDX_DC_Offset, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  260.       InitWindowGadget(GDX_DC_Interval, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  261.       UseLocale = (DC_V_Config.DateFormat == DC_C_LocaleDateFormat);
  262.       InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  263.       InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  264.       if (UseLocale)
  265.       {
  266.          InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  267.       }
  268.       else
  269.       {
  270.          InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, (DC_V_Config.ShowDay == FALSE), DIGITALCLOCK_WINDOW);
  271.       }
  272.       
  273.       InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  274.       InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  275.       InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, !UseLocale, DIGITALCLOCK_WINDOW);
  276.       
  277.       InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  278.       InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled, 
  279.                        (DC_V_Config.ScreenSelection != DC_C_ScreensByPattern), DIGITALCLOCK_WINDOW);
  280.    }
  281.    else
  282.    {
  283.       InitWindowGadget(GDX_DC_Offset, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  284.       InitWindowGadget(GDX_DC_Interval, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  285.       InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  286.       InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  287.       InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  288.       InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  289.       InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  290.       InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  291.       InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  292.       InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  293.    }
  294. }
  295.  
  296.  
  297.  
  298.  
  299.  
  300. /* handle DigitalClock window events */
  301. LONG
  302.    HandleDigitalClockIDCMP(VOID)
  303. {
  304.    struct IntuiMessage *msg;
  305.    struct Gadget   *gadget;
  306.    ULONG           class;
  307.    UWORD           code;
  308.    LONG            num;
  309.    BOOL            close=FALSE;
  310.    LONG            ret=RET_OKAY;
  311.    
  312.    while (!close && (msg = GT_GetIMsg(DigitalClockWnd->UserPort)))
  313.    {
  314.       class = msg->Class;
  315.       code = msg->Code;
  316.       gadget = (struct Gadget *)msg->IAddress;
  317.       GT_ReplyIMsg(msg);
  318.       
  319.       switch (class)
  320.       {
  321.       case GADGETUP:
  322.       case GADGETDOWN:
  323.          switch (gadget->GadgetID)
  324.          {
  325.          case GD_DC_OK:
  326.             CloseDigitalClockWindow();
  327.             if (!ShowWindowID(ROOT_WINDOW))
  328.                ret= RET_QUIT;
  329.             close=TRUE;
  330.             break;
  331.             
  332.          case GD_DC_State:
  333.             DC_V_Config.State ^= TRUE;
  334.             InitDigitalClockGadgets();
  335.             break;
  336.             
  337.          case GD_DC_Offset:
  338.             num = GetNumber(gadget);
  339.             if (num >= 0) 
  340.                DC_V_Config.Offset = num;
  341.             else 
  342.                DisplayBeep(DigitalClockWnd->WScreen);
  343.             InitWindowGadget(GDX_DC_Offset, GTIN_Number, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
  344.             break;
  345.             
  346.          case GD_DC_Interval:
  347.             num = GetNumber(gadget);
  348.             if (num > 0) 
  349.                DC_V_Config.Interval = num;
  350.             else 
  351.                DisplayBeep(DigitalClockWnd->WScreen);
  352.             InitWindowGadget(GDX_DC_Interval, GTIN_Number, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
  353.             break;
  354.             
  355.          case GD_DC_ShowDate:
  356.             DC_V_Config.ShowDate ^= TRUE;
  357.             break;
  358.             
  359.          case GD_DC_ShowDay:
  360.             DC_V_Config.ShowDay ^= TRUE;
  361.             InitDigitalClockGadgets();
  362.             break;
  363.             
  364.          case GD_DC_ShortDay:
  365.             DC_V_Config.ShortDay ^= TRUE;
  366.             break;
  367.             
  368.          case GD_DC_ShowSecs:
  369.             DC_V_Config.ShowSecs ^= TRUE;
  370.             break;
  371.             
  372.          case GD_DC_DateFormat:
  373.             DC_V_Config.DateFormat = code;
  374.             InitDigitalClockGadgets();
  375.             break;
  376.             
  377.          case GD_DC_LocaleDateFormat:
  378.             if (DC_V_Config.LocaleDateFormat)
  379.             {
  380.                FreeVec(DC_V_Config.LocaleDateFormat);
  381.             }
  382.             DC_V_Config.LocaleDateFormat = DupStr(GetString(gadget));
  383.             break;
  384.             
  385.          case GD_DC_ScreenSelection:
  386.             DC_V_Config.ScreenSelection = code;
  387.             InitDigitalClockGadgets();
  388.             break;
  389.             
  390.          case GD_DC_ScreenPattern:
  391.             NewPattern(GDX_DC_ScreenPattern, &DC_V_Config.ScreenPatternData, gadget, DIGITALCLOCK_WINDOW);
  392.             break;
  393.             
  394.          }                   /* switch (gadget->GadgetID) */
  395.          break;
  396.          
  397.       case IDCMP_RAWKEY:
  398.          /* Help key pressed */
  399.          if (code == 95)
  400.          {
  401.             /* Display the node */
  402.             ShowYakHelp(PrefsHelp, "Digital Clock");
  403.          }
  404.          break;
  405.          
  406.       case REFRESHWINDOW:
  407.          GT_BeginRefresh(DigitalClockWnd);
  408.          GT_EndRefresh(DigitalClockWnd, TRUE);
  409.          break;
  410.          
  411.       }                       /* switch (class) */
  412.       
  413.    }                           /* while more messages */
  414.    
  415.    return ret;
  416. }
  417.  
  418.  
  419.  
  420. /* show our DigitalClock window */
  421. BOOL
  422.    ShowDigitalClockWindow(VOID)
  423. {
  424.    if (!DigitalClockWdi)
  425.    {
  426.       DigitalClockWdi = TRUE;
  427.       
  428.       DigitalClockWdt = getString(DigitalClock);
  429.       LocalizeNGadLabels (DigitalClock_CNT, DigitalClockNGad);
  430.       InitDateFormatLabels ();
  431.       InitScreenSelectionLabels ();
  432.    }
  433.    
  434.    if (!OpenDigitalClockWindow())     /* like the name says... */
  435.    {
  436.       InitDigitalClockGadgets();
  437.       wndsigflag = 1 << DigitalClockWnd->UserPort->mp_SigBit;
  438.       curwin = DigitalClockWnd;
  439.       curwinID = DIGITALCLOCK_WINDOW;
  440.       HandleIDCMP = HandleDigitalClockIDCMP;
  441.       return TRUE;
  442.    }
  443.    
  444.    FreeGadgets(DigitalClockGList);
  445.    CloseDownScreen();
  446.    curwin =  NULL;
  447.    wndsigflag = 0L;
  448.    return FALSE;
  449. }
  450.  
  451.